// //////////////////////////////////////////////////////////////////////////////////
// //                                                                              //
// //  This file is part of the buola project (https://code.google.com/p/buola/).  //
// //                                                                              //
// //  Copyright(c) 2007-2012 Xavi Gratal                                          //
// //  gratal AT gmail DOT com                                                     //
// //                                                                              //
// //  Buola is free software: you can redistribute it and/or modify               //
// //  it under the terms of the GNU General Public License as published by        //
// //  the Free Software Foundation, either version 3 of the License, or           //
// //  (at your option) any later version.                                         //
// //                                                                              //
// //  Buola is distributed in the hope that it will be useful,                    //
// //  but WITHOUT ANY WARRANTY; without even the implied warranty of              //
// //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               //
// //  GNU General Public License for more details.                                //
// //                                                                              //
// //  You should have received a copy of the GNU General Public License           //
// //  along with buola.  If not, see <http://www.gnu.org/licenses/>.              //
// //                                                                              //
// //////////////////////////////////////////////////////////////////////////////////
// 
// #include <buola/buola.h>
// 
// #include <buola/os/cgroupinfo.h>
// 
// #include <pwd.h>
// #include <sys/socket.h>
// #include <sys/types.h>
// #include <unistd.h>
// #include <grp.h>
// 
// namespace buola {
// 
// CGroupInfo *CGroupInfo::mRealGroupInfo=nullptr;
// CGroupInfo *CGroupInfo::mEffGroupInfo=nullptr;
// std::vector<CGroupInfo*> CGroupInfo::mGroupInfo;
// 
// void CGroupInfo::ReadData() const
// {
// 	if(mHasData) return;
// 
// 	group lInfo;
// 	group *lReturn;
// 	char lBuffer[1024];
// 
// 	getgrgid_r(mID,&lInfo,lBuffer,1024,&lReturn);
// 
// 	if(lReturn)
// 	{
// 		mExists=true;
// 		mName=utf32(lInfo.gr_name);
// 		for(int i=0;lInfo.gr_mem[i];i++)
// 		{
// 			mUsers.push_back(utf32(lInfo.gr_mem[i]));
// 		}
// 	}
// 	else
// 	{
// 		mExists=false;
// 		mName.clear();
// 		mUsers.clear();
// 	}
// 
// 	mHasData=true;
// }
// 
// CGroupInfo *CGroupInfo::GetGroupInfo(const std::wstring &pName)
// {
// 	group lInfo;
// 	group *lReturn;
// 	char lBuffer[512];
// 
// 	getgrnam_r(utf8(pName,COD_ASCII).c_str(),&lInfo,lBuffer,512,&lReturn);
// 
// 	if(lReturn)
// 		return GetGroupInfo(lInfo.gr_gid);
// 
// 	return nullptr;
// }
// 
// CGroupInfo *CGroupInfo::GetGroupInfo(int pID)
// {
// 	for(int i=0;i<mGroupInfo.size();i++)
// 	{
// 		if(mGroupInfo[i]->mID==pID) return mGroupInfo[i];
// 	}
// 
// 	CGroupInfo *lInfo=new CGroupInfo(pID);
// 	mGroupInfo.push_back(lInfo);
// 
// 	return lInfo;
// }
// 
// CGroupInfo *CGroupInfo::GetRealGroupInfo()
// {
// 	if(!mRealGroupInfo)
// 		mRealGroupInfo=GetGroupInfo((int)getgid());
// 
// 	return mRealGroupInfo;
// }
// 
// CGroupInfo *CGroupInfo::GetEffGroupInfo()
// {
// 	if(!mEffGroupInfo)
// 		mEffGroupInfo=GetGroupInfo((int)getegid());
// 
// 	return mEffGroupInfo;
// }
// 
// int CGroupInfo::GetRealGroupID()
// {
// 	return (int)getgid();
// }
// 
// int CGroupInfo::GetEffGroupID()
// {
// 	return (int)getegid();
// }
// 
// 
// /*namespace buola*/ }
